Java字符集编码与转码 您所在的位置:网站首页 java ascii转char Java字符集编码与转码

Java字符集编码与转码

2023-05-05 09:08| 来源: 网络整理| 查看: 265

Java字符集编码与转码 原创

mb644638dfa963e 2023-04-25 11:04:37 博主文章分类:面试相关 ©著作权

文章标签 Java Apache 字符串 读取文件 ico 文章分类 Html/CSS 前端开发

©著作权归作者所有:来自51CTO博客作者mb644638dfa963e的原创作品,请联系作者获取转载授权,否则将追究法律责任

[code]

Java字符集编码与转码

Java字符的class代码总是Unicode字符集的UTF-16编码,运行时内存中的字符串在没有指定编码的时候也总是Unicode编码。

Java编译时候,会将java文件的编码按照指定编码或者(系统默认的)编码转换为Unicode并加载到内存中进行编译。

下面给出一个Java转码工具,没有测试过,呵呵:

package lavasoft.common; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.*; /** * 转码工具,全面支持文件、字符串的转码 * * @author Administrator 2009-11-29 16:14:21 */ public class EncodingToolkit { private static Log log = LogFactory.getLog(EncodingToolkit.class); public static void main(String[] args) { String han = "汉"; System.out.println("---------"); } /** * 对字符串重新编码 * * @param text 字符串 * @param resEncoding 源编码 * @param newEncoding 新编码 * @return 重新编码后的字符串 */ public static String reEncoding(String text, String resEncoding, String newEncoding) { String rs = null; try { rs = new String(text.getBytes(resEncoding), newEncoding); } catch (UnsupportedEncodingException e) { log.error("读取文件为一个内存字符串失败,失败原因是使用了不支持的字符编码"); throw new RuntimeException(e); } return rs; } /** * 重新编码Unicode字符串 * * @param text 源字符串 * @param newEncoding 新的编码 * @return 指定编码的字符串 */ public static String reEncoding(String text, String newEncoding) { String rs = null; try { rs = new String(text.getBytes(), newEncoding); } catch (UnsupportedEncodingException e) { log.error("读取文件为一个内存字符串失败,失败原因是使用了不支持的字符编码" + newEncoding); throw new RuntimeException(e); } return rs; } /** * 文本文件重新编码 * * @param resFile 源文件 * @param resEncoding 源文件编码 * @param distFile 目标文件 * @param newEncoding 目标文件编码 * @return 转码成功时候返回ture,否则false */ public static boolean reEncoding(File resFile, String resEncoding, File distFile, String newEncoding) { boolean flag = true; InputStreamReader reader = null; OutputStreamWriter writer = null; try { reader = new InputStreamReader(new FileInputStream(resFile), resEncoding); writer = new OutputStreamWriter(new FileOutputStream(distFile), newEncoding); char buf[] = new char[1024 * 64]; // 字符缓冲区 int len; while ((len = reader.read(buf)) != -1) { writer.write(buf, 0, len); } writer.flush(); writer.close(); reader.close(); } catch (FileNotFoundException e) { flag = false; log.error("没有找到文件,转码发生异常!"); throw new RuntimeException(e); } catch (IOException e) { flag = false; log.error("读取文件为一个内存字符串失败,失败原因是读取文件异常!"); throw new RuntimeException(e); } finally { if (reader != null) try { reader.close(); } catch (IOException e) { flag = false; throw new RuntimeException(e); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { flag = false; throw new RuntimeException(e); } } } return flag; } /** * 读取文件为一个Unicode编码的内存字符串,保持文件原有的换行格式 * * @param resFile 源文件对象 * @param encoding 文件字符集编码 * @return 文件内容的Unicode字符串 */ public static String file2String(File resFile, String encoding) { StringBuffer sb = new StringBuffer(); try { LineNumberReader reader = new LineNumberReader(new BufferedReader(new InputStreamReader(new FileInputStream(resFile), encoding))); String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } reader.close(); } catch (UnsupportedEncodingException e) { log.error("读取文件为一个内存字符串失败,失败原因是使用了不支持的字符编码" + encoding); throw new RuntimeException(e); } catch (FileNotFoundException e) { log.error("读取文件为一个内存字符串失败,失败原因所给的文件" + resFile + "不存在!"); throw new RuntimeException(e); } catch (IOException e) { log.error("读取文件为一个内存字符串失败,失败原因是读取文件异常!"); throw new RuntimeException(e); } return sb.toString(); } /** * 使用指定编码读取输入流为一个内存Unicode字符串,保持文件原有的换行格式 * * @param in 输入流 * @param encoding 构建字符流时候使用的字符编码 * @return Unicode字符串 */ public static String stream2String(InputStream in, String encoding) { StringBuffer sb = new StringBuffer(); LineNumberReader reader = null; try { reader = new LineNumberReader(new BufferedReader(new InputStreamReader(in, encoding))); String line; while ((line = reader.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } reader.close(); in.close(); } catch (UnsupportedEncodingException e) { log.error("读取文件为一个内存字符串失败,失败原因是使用了不支持的字符编码" + encoding); throw new RuntimeException(e); } catch (IOException e) { log.error("读取文件为一个内存字符串失败,失败原因是读取文件异常!"); throw new RuntimeException(e); } finally { if (in != null) try { in.close(); } catch (IOException e) { log.error("关闭输入流发生异常!", e); throw new RuntimeException(e); } } return sb.toString(); } /** * 字符串保存为制定编码的文本文件 * * @param text 字符串 * @param distFile 目标文件 * @param encoding 目标文件的编码 * @return 转换成功时候返回ture,否则false */ public static boolean string2TextFile(String text, File distFile, String encoding) { boolean flag = true; if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs(); OutputStreamWriter writer = null; try { writer = new OutputStreamWriter(new FileOutputStream(distFile), encoding); writer.write(text); writer.close(); } catch (IOException e) { flag = false; log.error("将字符串写入文件发生异常!"); throw new RuntimeException(e); } finally { if (writer != null) try { writer.close(); } catch (IOException e) { log.error("关闭输出流发生异常!", e); throw new RuntimeException(e); } } return flag; } } [/code]

收藏 评论 分享 举报

上一篇:EXT 的继承

下一篇:生成随机数 不重复的随机抽取(完美版本)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有